﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls.Primitives;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Markup;
using System.Security.Principal;
using System.Windows.Resources;
using System.Collections;
using System.Windows.Controls;
using System.Data;
using System.ComponentModel;
using CMD.BAL.CAT;
using System.Text.RegularExpressions;
using CMD_DKT.BAL;
using CMD.BAL.MISC;
using CMD_DKT.Utilities;
using RestSharp;
using Newtonsoft.Json;
using System.Data.SqlClient;

namespace CMD_DKT.Sol
{
    public class UIModificaciones: UINuevaSolicitud
    {
        private Dictionary<string, string> respuesta;
        public Dictionary<string, string> Respuesta
        {
            get { return respuesta; }
            set { respuesta = value; }
        }

        private Dictionary<string, string> mensaje;
        public Dictionary<string, string> Mensaje
        {
            get { return mensaje; }
            set { mensaje = value; }
        }

        public TextBox txt_numeroCliente;
        Image btn_numeroCliente;
        Grid gd_datosGenerales;
        Grid gd_Direccion;

        Int32 sap_block;

        public UIModificaciones(ContentControl PA, ContentControl PN, ScrollViewer PC)
            : base(PA, PN, PC)
        { 
            MainWindow mw = (MainWindow)App.Current.MainWindow;
            string msj;
            if (((string[])getServerFileList(out msj))== null)
            {
               
                MessageBox.Show(msj, "Atención", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                if (mw.Despliega1 != null)
                    mw.Despliega1 = new Sol.UISolicitudes(PanelAccion, PanelNavegacion, PanelCentral);
                return;
            }
            PanelAccion = PA;
            PanelNavegacion = PN;
            PanelCentral = PC;
            PanelAccion.Content = null;
            this.liTxt = new List<TextBox>();
            lbl_Saving = mw.lbl_Saving;

            #region Cagar Panel de Acción después de accionar ALTA

            string nombre = @"BotonesAlta.xaml";

            DependencyObject rootElement;
            using (FileStream fs = new FileStream(nombre, FileMode.Open))
            {
                rootElement = (DependencyObject)XamlReader.Load(fs);
            }

            PanelAccion.Content = rootElement;
            FrameworkElement frameworkElement = (FrameworkElement)rootElement;

            lblEnviar = (Image)frameworkElement.FindName("img_Enviar");
            lblEnviar.MouseUp += new MouseButtonEventHandler(lblEnviar_MouseUp);
            lblEnviar.PreviewMouseUp += new MouseButtonEventHandler(lblEnviar_PreviewMouseDown);

            lblGuardar = (Image)frameworkElement.FindName("img_Guardar");
            lblGuardar.MouseUp += new MouseButtonEventHandler(lblGuardar_MouseUp);
            lblGuardar.PreviewMouseUp += new MouseButtonEventHandler(lblGuardar_PreviewMouseUp);

            //Border lbValidar = (Border)frameworkElement.FindName("lblValidar");
            //lbValidar.MouseUp += new MouseButtonEventHandler(lbValidar_MouseUp);

            Image bdCancelar = (Image)frameworkElement.FindName("img_Cancelar");
            bdCancelar.MouseUp += new MouseButtonEventHandler(bdCancelar_MouseUp);

            popArchivos = (Popup)frameworkElement.FindName("popArchivo");
            spArchivos = (StackPanel)frameworkElement.FindName("spArchivos");
            bdArchivos = (Image)frameworkElement.FindName("img_Archivos");
            bdArchivos.MouseUp += new MouseButtonEventHandler(bdArchivos_MouseUp);

            popPrioridad = (Popup)frameworkElement.FindName("popPrioridad");
            spPrioridades = (StackPanel)frameworkElement.FindName("spPrioridades");
            bdPrioridad = (Image)frameworkElement.FindName("img_Prioridad");
            bdPrioridad.MouseUp += new MouseButtonEventHandler(bdPrioridad_MouseUp);
            cargarPrioridades();

            //lblGuardarYSalir
            lblGuardarYSalir = (Image)frameworkElement.FindName("img_GuardarYSalir");
            lblGuardarYSalir.MouseUp += new MouseButtonEventHandler(lblGuardar_MouseUp);
            lblGuardarYSalir.PreviewMouseUp += new MouseButtonEventHandler(lblGuardar_PreviewMouseUp);

            Image lblInfoDoc = (Image)frameworkElement.FindName("img_InfoDoc");
            lblInfoDoc.MouseUp += new MouseButtonEventHandler(lblInfoDoc_MouseUp);
            txtBlockStatus = (TextBlock)frameworkElement.FindName("txtBlock_Status");
            #endregion
            
            #region Buscar elementos de Nueva Solicitud
            
            string nombrens = @"Modificaciones.xaml";
            DependencyObject rootElementns;
            using (FileStream fsns = new FileStream(nombrens, FileMode.Open))
            {
                rootElementns = (DependencyObject)XamlReader.Load(fsns);
            }

            PanelCentral.Content = rootElementns;
            FrameworkElement frameworkElementns = (FrameworkElement)rootElementns;
            this.feNs = frameworkElementns;

            spAlta = (StackPanel)frameworkElementns.FindName("spModificacion");

            #region------Controles de la sección Solicitud de modificacion del cliente-----------//
            txt_numeroCliente = (TextBox)frameworkElementns.FindName("tbCliente");
            txt_numeroCliente.KeyDown += new KeyEventHandler(txt_numeroCliente_KeyDown);
            btn_numeroCliente = (Image)frameworkElementns.FindName("btnCliente");
            btn_numeroCliente.MouseUp += new MouseButtonEventHandler(btn_numeroCliente_Click);

            #endregion
            //------Controles de la sección Datos Generales--------------//
            //tRazonSocial = (TextBox)frameworkElementns.FindName("tbRazonSocial");
            //tRFC = (TextBox)frameworkElementns.FindName("tbRFC");
            //tEmail = (TextBox)frameworkElementns.FindName("tbEmail");
            gd_datosGenerales = (Grid)frameworkElementns.FindName("gdDatosGenerales");
            tRazonSocial = (TextBox)frameworkElementns.FindName("tbRazonSocial");
            tRazonSocial.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DATOSGRAL", "RAZON_SOCIAL")).Rows[0]["LARGO"].ToString()));
            tRazonSocial.LostFocus +=new RoutedEventHandler(tRazonSocial_LostFocus);
            tRFC = (TextBox)frameworkElementns.FindName("tbRFC");
            tRFC.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DATOSGRAL", "RFC")).Rows[0]["LARGO"].ToString()));
            tRFC.LostFocus += new RoutedEventHandler(tRFC_LostFocus);
            tEmail = (TextBox)frameworkElementns.FindName("tbEmail");
            tEmail.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DATOSGRAL", "CORREO")).Rows[0]["LARGO"].ToString()));
            tEmail.LostFocus += new RoutedEventHandler(Email_LostFocus);
            lbTipoSolicitud.Content = "Modificación";
                      
            //--------Controles de la sección Dirección de Entrega-----------------//
            /* tCalle = (TextBox)frameworkElementns.FindName("tbCalle");
             tNoExterior = (TextBox)frameworkElementns.FindName("tbNoExterior");
             tNoInterior = (TextBox)frameworkElementns.FindName("tbNoInterior");
             tCodigoPostal = (TextBox)frameworkElementns.FindName("tbCodigoPostal");
             //cCoPoEntrega.SelectionChanged += new SelectionChangedEventHandler(cCoPoEntrega_SelectionChanged);
            
             tDelMunicipio = (TextBox)frameworkElementns.FindName("tbDelMunicipio");
             cColoniaDistrito = (ComboBox)frameworkElementns.FindName("cbColoniaDistrito");
             tEstado = (TextBox)frameworkElementns.FindName("tbEstado");
           
             tLada = (TextBox)frameworkElementns.FindName("tbLada");
             tTelFiscal = (TextBox)frameworkElementns.FindName("tbTelFiscal");*/
            #region dirfiscal
            #region Controles de la sección Dirección Fiscal
            gd_Direccion = (Grid)frameworkElementns.FindName("gdDatosFiscales");
            tCalle = (TextBox)frameworkElementns.FindName("tbCalle");
            tCalle.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "CALLE")).Rows[0]["LARGO"].ToString()));
            tCalle.LostFocus+=new RoutedEventHandler(tCalle_LostFocus);
            tNoExterior = (TextBox)frameworkElementns.FindName("tbNoExterior");
            tNoExterior.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "NUMERO_EXTERIOR")).Rows[0]["LARGO"].ToString()));
            tNoExterior.LostFocus +=new RoutedEventHandler(tNoExterior_LostFocus);
            tNoInterior = (TextBox)frameworkElementns.FindName("tbNoInterior");
            tNoInterior.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "NUMERO_INTERIOR")).Rows[0]["LARGO"].ToString()));
            tNoInterior.LostFocus +=new RoutedEventHandler(tNoInterior_LostFocus);
            tCodigoPostal = (TextBox)frameworkElementns.FindName("tbCodigoPostal");
            tDelMunicipio = (TextBox)frameworkElementns.FindName("tbDelMunicipio");
            cColoniaDistrito = (ComboBox)frameworkElementns.FindName("cbColoniaDistrito");
            cLocalidad = (ComboBox)frameworkElementns.FindName("cbLocalidad");
            tEstado = (TextBox)frameworkElementns.FindName("tbEstado");

            tLada = (TextBox)frameworkElementns.FindName("tbLada");
            tLada.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "LADA")).Rows[0]["LARGO"].ToString()));
            tLada.LostFocus +=new RoutedEventHandler(tLada_LostFocus);
            tTelFiscal = (TextBox)frameworkElementns.FindName("tbTelFiscal");
            tTelFiscal.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "TELEFONO")).Rows[0]["LARGO"].ToString()));
            tEstado.IsEnabled = false;
            tDelMunicipio.IsEnabled = false;

            tbTelExtFiscal = (TextBox)frameworkElementns.FindName("tbTelExtFiscal");
            tbTelExtFiscal.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "TEL_EXTENS")).Rows[0]["LARGO"].ToString()));
            tbFaxExtFiscal = (TextBox)frameworkElementns.FindName("tbFaxExtFiscal");
            tbFaxExtFiscal.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "FAX_EXTENS")).Rows[0]["LARGO"].ToString()));
            tbFaxFiscal = (TextBox)frameworkElementns.FindName("tbFaxFiscal");
            tbFaxFiscal.MaxLength = (System.Convert.ToInt32(((DataTable)TableLength.GetData("CMD_SOLICITUD_DIRFISCAL", "FAX_NUMBER")).Rows[0]["LARGO"].ToString()));  

            tCalle.TextChanged += new TextChangedEventHandler(tCalle_TextChanged);
            tNoExterior.TextChanged += new TextChangedEventHandler(tNoExterior_TextChanged);
            tNoInterior.TextChanged += new TextChangedEventHandler(tNoInterior_TextChanged);
            tCodigoPostal.LostFocus += new RoutedEventHandler(tCodigoPostal_LostFocus);
            tCodigoPostal.TextChanged += new TextChangedEventHandler(tCodigoPostal_TextChanged);
            tLada.TextChanged += new TextChangedEventHandler(tLada_TextChanged);
            cColoniaDistrito.SelectionChanged += new SelectionChangedEventHandler(cColoniaDistrito_SelectionChanged);
            cLocalidad.SelectionChanged += new SelectionChangedEventHandler(cLocalidad_SelectionChanged);
            tTelFiscal.TextChanged += new TextChangedEventHandler(tTelFiscal_TextChanged);
            tTelFiscal.LostFocus += new RoutedEventHandler(tTel_LostFocus);

            tbTelExtFiscal.LostFocus += new RoutedEventHandler(tbTelExt_LostFocus);
            tbFaxFiscal.LostFocus += new RoutedEventHandler(tbFax_LostFocus);
            tbFaxExtFiscal.LostFocus += new RoutedEventHandler(tbFaxExt_LostFocus);

            #endregion
            #endregion
            lbl_idTipo.Content = "2";
            lbl_idPrioridad.Content = "3";
            //chMismoDom.IsChecked = true;
            #endregion


            #region Carga del Panel de Navegación después de accionar ALTA
            string nombre2 = @"SeccionesModificacion.xaml";

            DependencyObject rootElement2;
            using (FileStream fs2 = new FileStream(nombre2, FileMode.Open))
            {
                rootElement2 = (DependencyObject)XamlReader.Load(fs2);
            }

            PanelNavegacion.Content= rootElement2;
            FrameworkElement frameworkElement2 = (FrameworkElement)rootElement2;

            ArrayList al = SolAlta.UINavModifica.GetSecRanges();

            #endregion


            #region Pegar eventos a los botones de navegacion

            //Pegar eventos a los botones de navegacion
            Grid grdNav01 = (Grid)frameworkElement2.FindName("grdNavModificacion");
            foreach (Object tmp in grdNav01.Children)
            {
                if (tmp is Border)
                {
                    Border tmpBrd = (Border)tmp;
                    tmpBrd.MouseUp += delegate(object sender3, MouseButtonEventArgs e3)
                    {
                        double tgt = 0;
                        Grid _brdNavgrdNav01 = (Grid)frameworkElement2.FindName("grdNavModificacion");
                        foreach (Object __tmp in _brdNavgrdNav01.Children)
                        {
                            if (__tmp is Border)
                            {
                                Border __tmpBrd = (Border)__tmp;
                                __tmpBrd.Background = Brushes.Transparent;
                            }
                        }

                        foreach (SolAlta.NavSecRange ns in al)
                        {
                            if (ns.controlName == ((Border)sender3).Name)
                            {
                                tgt = ns.SEC_INI;
                            }
                        }

                        ((Border)sender3).Background = Brushes.White;
                        PanelCentral.ScrollToVerticalOffset(tgt);
                        //scrollViewer1.ScrollToVerticalOffset(tgt);
                    };
                }
            }

            #endregion

        
            #region efecto scroll
            //Function para cambiar automaticamente de etiqueta cuando se hace scroll
            this.PanelCentral.ScrollChanged += delegate(object sender2, ScrollChangedEventArgs e2)
            {
                foreach (SolAlta.NavSecRange ns in al)
                {
                    if (e2.VerticalOffset >= ns.SEC_INI && e2.VerticalOffset <= ns.SEC_END)
                    {
                        Grid grdNav = (Grid)frameworkElement2.FindName("grdNavModificacion");
                        foreach (Object tmp in grdNav.Children)
                        {
                            if (tmp is Border)
                            {
                                Border tmpBrd = (Border)tmp;
                                var converter = new System.Windows.Media.BrushConverter();
                                tmpBrd.Background = Brushes.Transparent;

                                Border sel = (Border)frameworkElement2.FindName(ns.controlName);
                                sel.Background = Brushes.White;
                            }
                        }
                    }
                }
            };

            #endregion
            cTipoSolicitud.SelectionChanged -= new SelectionChangedEventHandler(cTipoSolicitud_SelectionChanged);
            targetPath = System.Configuration.ConfigurationManager.AppSettings["ClientDocsFolder"];
            cperso = cPersona.SelectedValue.ToString();
            primerArchivo = "-1";
            sSolicitudDocs = "-1";
            targetPath = AppConfs.ClientDocsFolder;
            PanelCentral.ScrollToVerticalOffset(0);
            sap_block = 0;

        }

        void btn_numeroCliente_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                cargaListTextBox();
                foreach (TextBox tx in liTxt)
                {
                    tx.BorderBrush = new SolidColorBrush(SystemColors.ActiveBorderColor);
                    tx.Background = new SolidColorBrush(Colors.White);
                    tx.Foreground = new SolidColorBrush(Colors.Black);
                }

                CargarSolModif(txt_numeroCliente.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema en la conexión: " + ex.Message.ToString(), "Atención", MessageBoxButton.OK, MessageBoxImage.Hand);
            }
        }

        void txt_numeroCliente_KeyDown(object sender, KeyEventArgs e)
        {
            try
            {
                Mouse.OverrideCursor = Cursors.Wait;
                if (e.Key == Key.Enter)
                {
                    cargaListTextBox();
                    foreach (TextBox tx in liTxt)
                    {
                        tx.BorderBrush = new SolidColorBrush(SystemColors.ActiveBorderColor);
                        tx.Background = new SolidColorBrush(Colors.White);
                        tx.Foreground = new SolidColorBrush(Colors.Black);
                    }
                    CargarSolModif(((TextBox)sender).Text);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema en la conexión: " + ex.Message.ToString(), "Atención", MessageBoxButton.OK, MessageBoxImage.Hand);
            }
            finally
            {
                Mouse.OverrideCursor = null;
            }
        }

        private void CargarSolModif(string p)
        {
            DataTable dt = new DataTable();
            MessageBoxResult res;
            try
            {
                Mouse.OverrideCursor = Cursors.Wait;
                //*********************
                Dictionary<string, Dictionary<string, string>> values 
                    = Solicitud.CallWCFServiceSAP(AppConfs.WCFService, "GetInfoModif_SAP", new { numCliente = Solicitud.SerializeParamWCFService(createConsultDictionary(p)) });

                if (!values.ContainsKey("ERROR"))
                {
                    Respuesta = values["CHANGE"];
                    Mensaje = values["OUTPUT"];
                }
                else {
                    Dictionary<string,string> error= values["ERROR"];
                    Mouse.OverrideCursor = null;
                    MessageBox.Show(error["ERROR"], "Respuesta de SAP", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    return;
                }

                //******************
                //Respuesta = Solicitud.CallWCFService((AppConfs.WCFService, "GetInfoModif", new { numCliente = p });
                //Mensaje = Solicitud.CallWCFService(AppConfs.WCFService, "GetInfoMessage", new { numCliente = p });

                //if (Respuesta.Keys.Contains("Mensaje") || Mensaje.Keys.Contains("Mensaje") || (Respuesta.Keys.Contains("Exception") || Mensaje.Keys.Contains("Exception")))
                //    throw new System.Exception((Respuesta.Keys.Contains("Mensaje"))?Respuesta["Mensaje"]:Mensaje["Mensaje"]);

                cTipoSolicitud.SelectionChanged -= new SelectionChangedEventHandler(cTipoSolicitud_SelectionChanged);
                if (Mensaje.Keys.Contains("STAT"))
                    if (Mensaje["STAT"] == "ERBO")
                    {
                        res=MessageBox.Show("Este cliente está bloqueado, Desea desbloquearlo?","Atención",MessageBoxButton.YesNo,MessageBoxImage.Question);
                        if (res == MessageBoxResult.No || res == MessageBoxResult.None)
                        {
                            MainWindow mw = (MainWindow)App.Current.MainWindow;
                            if (mw.Despliega1 != null)
                                mw.Despliega1 = new Sol.UISolicitudes(PanelAccion, PanelNavegacion, PanelCentral);
                            return; 
                        }
                        if (Respuesta.Keys.Contains("KTOKD"))
                            if (Respuesta["KTOKD"] == "ZM02")
                            {
                                dt = TipoSolicitante.GetData();
                                var results = from DataRow myRow in dt.Rows
                                              where myRow.Field<string>("DSC_TIPO_SOLICITANTE") == "Sucursal"
                                              select myRow;

                                DataTable dattabb = results.CopyToDataTable();
                                cTipoSolicitud.SelectedValue = dattabb.Rows[0]["UNID_TIPO_SOLICITANTE"].ToString();
                                chMismoDom.IsChecked = false;
                            }
                            else
                                if (Respuesta["KTOKD"] == "ZM01")
                                {
                                    dt = TipoSolicitante.GetData();
                                    var results = from DataRow myRow in dt.Rows
                                                  where myRow.Field<string>("DSC_TIPO_SOLICITANTE") == "Cliente"
                                                  select myRow;

                                    DataTable dattabb = results.CopyToDataTable();
                                    cTipoSolicitud.SelectedValue = dattabb.Rows[0]["UNID_TIPO_SOLICITANTE"].ToString();
                                    chMismoDom.IsChecked = true;
                                }
                        sap_block = 1;
                    }
                    else
                    {
                        sap_block = 0;
                        chMismoDom.IsChecked = false;
                    }


                if (Respuesta.Keys.Contains("NAME1"))
                {
                    tRazonSocial.Text = Respuesta["NAME1"];
                    if (Respuesta.Keys.Contains("NAME2"))
                    {
                        tRazonSocial.Text += Respuesta["NAME2"];
                        if (Respuesta.Keys.Contains("NAME3"))
                            tRazonSocial.Text += Respuesta["NAME3"];
                    }
                }
                if (Respuesta.Keys.Contains("STCD1"))//"SORTL"))
                {
                    tRFC.Text = Respuesta["STCD1"];//["SORTL"];
                    tRFC_LostFocus(tRFC, null);
                    //tRFC_SetPersona(tRFC.Text.Length);
                }
                if (Respuesta.Keys.Contains("SMTP_ADDR"))
                {
                    tEmail.Text = Respuesta["SMTP_ADDR"];
                    Email_LostFocus(tEmail, null);
                }
                if (Respuesta.Keys.Contains("STREET1"))
                {
                    tCalle.Text = Respuesta["STREET1"];
                    if (Respuesta.Keys.Contains("STREET2"))
                        tCalle.Text += Respuesta["STREET2"];
                }
                if (Respuesta.Keys.Contains("STREET3"))
                    tNoExterior.Text = Respuesta["STREET3"];
                if (Respuesta.Keys.Contains("HOUSE_NUM1"))
                    tNoInterior.Text = Respuesta["HOUSE_NUM1"];
                if (Respuesta.Keys.Contains("POST_CODE1"))
                {
                    tCodigoPostal.Text = Respuesta["POST_CODE1"];
                    if (tCodigoPostal.Text.ToString().Trim() != "") 
                        tCodigoPostal_LostFocus(tCodigoPostal, null);
                }
                if (Respuesta.Keys.Contains("TEL_NUMBER"))
                {
                    try
                    {
                        tLada.Text = Respuesta["TEL_NUMBER"].Substring(0, 2);
                        tTelFiscal.Text = Respuesta["TEL_NUMBER"].Substring(2, Respuesta["TEL_NUMBER"].Length - 2);
                    }
                    catch
                    {
                    }
                }
                if (Respuesta.Keys.Contains("TEL_EXTENS"))
                    tbTelExtFiscal.Text = Respuesta["TEL_EXTENS"];
                if (Respuesta.Keys.Contains("FAX_NUMBER"))
                    tbFaxFiscal.Text = Respuesta["FAX_NUMBER"];
                if (Respuesta.Keys.Contains("FAX_EXTENS"))
                    tbFaxExtFiscal.Text = Respuesta["FAX_EXTENS"];

                //this.llamarArchivos(Convert.ToInt32(lbl_idTipo.Content), cTipoSolicitud.SelectedValue.ToString(), cPersona.SelectedValue.ToString());
                ControlesModificacionActivar(true);
                

            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                Mouse.OverrideCursor = null;
            }

        }

        public void tRFC_SetPersona(int longitud)
        {
            DataTable dt = TipoPersonaFisica.GetData(longitud);
            if(dt.Rows.Count!=0)
                cPersona.SelectedValue = dt.Rows[0]["ID_TIPO_PERSONA_FISCAL"].ToString();
            cPersona_SelectionChanged(cPersona, null);
        }

        public void ControlesModificacionActivar(bool habilitar)
        {
            txt_numeroCliente.IsEnabled = !habilitar;
            gd_Direccion.IsEnabled = habilitar;
            gd_datosGenerales.IsEnabled = habilitar;
            btn_numeroCliente.IsEnabled = !habilitar;
            btn_numeroCliente.Opacity = (habilitar) ? 0.3 : 1.0;
        }

        public static String[] getServerFileList(out string msj)
        {
            String[] res;
            string serverDataFilePath;
            try
            {
                    serverDataFilePath = @"";
                    serverDataFilePath += System.Configuration.ConfigurationManager.AppSettings["ServerDocsConection"];
                    res = Directory.GetFiles(serverDataFilePath);
                    msj = "OK";
                    return res;
            }
            catch (IOException ex)
            {
                //MessageBox.Show("[getServerFileList] IOException Throwing error : " + ex.Message,"Alerta",MessageBoxButton.OK,MessageBoxImage.Error);
                //throw ex;
                msj = "Problema con la conexión : " + ex.Message;
                return null;
            }
            catch (UnauthorizedAccessException ex)
            {
                //MessageBox.Show("[getServerFileList] UnauthorizedAccessException Throwing error : " + ex.Message, "Alerta", MessageBoxButton.OK, MessageBoxImage.Error);
                //throw ex;
                msj = "No tiene acceso a esta ruta : " + ex.Message;
                return null;
            }
            catch (Exception ex)
            {
                //MessageBox.Show("[getServerFileList] Throwing error : " + ex.Message, "Alerta", MessageBoxButton.OK, MessageBoxImage.Error);
                //throw ex;
                msj = "Ha ocurrido un error : " + ex.Message;
                return null;
            }
        }

        public override void tRFC_LostFocus(object sender, RoutedEventArgs e)
        {
            if (((TextBox)sender).Text == "")
                return;
            if (ValidarRFC((TextBox)sender))
                tRFC_SetPersona(tRFC.Text.Length);
            else
                llamarArchivos(1, "99999", "99999");
        }

        public override bool ValidarRFC(TextBox tRFC1)
        {
            tRFC1.Text = tRFC1.Text.Trim().ToUpper();
            if (Regex.IsMatch(tRFC1.Text,
                (tRFC1.Text.Length == 12) ? @"^(([A-Z]){3})([0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9]?[A-Z,0-9]?[0-9,AZ]?)" :
                                              @"[A-Z,Ñ,&]{4}[0-9]{2}[0-1][0-9][0-3][0-9][A-Z,0-9]?[A-Z,0-9]?[0-9,AZ]?") && (tRFC1.Text.Length==tRFC1.MaxLength-1 ||tRFC1.Text.Length==tRFC1.MaxLength))
            {
                tRFC1.BorderBrush = new SolidColorBrush(SystemColors.ActiveBorderColor);
                tRFC1.Background = new SolidColorBrush(Colors.White);
                tRFC1.Foreground = new SolidColorBrush(Colors.Black);
                return true;
            }
            else
            {
                tRFC1.BorderBrush = new SolidColorBrush(Colors.Red);
                tRFC1.Background = new SolidColorBrush(Colors.Red);
                tRFC1.Foreground = new SolidColorBrush(Colors.White);
                return false;
            }
           
        }

        public override void cPersona_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            bool _Persona = false;
            if (ft == 1)
            {
                if (!validaArchivos())
                    if (MessageBox.Show("Esta Operación eliminará los archivos ya guardados que no coincidan con la regla ¿Desea continuar?", "Cambio de Regla", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == MessageBoxResult.No)
                        _Persona = true;
                if (!_Persona)
                    this.llamarArchivos(Convert.ToInt32(lbl_idTipo.Content), cTipoSolicitud.SelectedValue.ToString(), TipoPersonaFisica.GetData(tRFC.Text.Length).Rows[0]["ID_TIPO_PERSONA_FISCAL"].ToString(),sap_block);
                else
                {
                    cPersona.SelectionChanged -= new SelectionChangedEventHandler(cPersona_SelectionChanged);
                    cPersona.SelectedValue = cperso;
                    cPersona.SelectionChanged += new SelectionChangedEventHandler(cPersona_SelectionChanged);
                    return;
                }
            }
            else
            { this.llamarArchivos(Convert.ToInt32(lbl_idTipo.Content), cTipoSolicitud.SelectedValue.ToString(), cPersona.SelectedValue.ToString(),sap_block); }
        }

        public override void cargaListTextBox()
        {
            try
            {
                this.liTxt.Add(txt_numeroCliente);
                this.liTxt.Add(tRazonSocial);
                this.liTxt.Add(tRFC);
                this.liTxt.Add(tEmail);
                this.liTxt.Add(tCalle);
                this.liTxt.Add(tNoExterior);
                this.liTxt.Add(tNoInterior);
                this.liTxt.Add(tDelMunicipio);
                this.liTxt.Add(tEstado);
                this.liTxt.Add(tLada);
                this.liTxt.Add(tTelFiscal);
                this.liTxt.Add(tbFaxFiscal);
                this.liTxt.Add(tbFaxExtFiscal);
                this.liTxt.Add(tbTelExtFiscal);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public override Solicitud GetDatatoSave(object sender)
        {
            if (sol.Unid_solicitud != 0)
                lbl_unidSol.Content = sol.Unid_solicitud.ToString();
            if (sol.Unid_docinfo != 0)
                lbl_unidDocinfo.Content = sol.Unid_docinfo.ToString();
            if (sol.Unid_datos != 0)
                lbl_unidDatos.Content = sol.Unid_datos.ToString();
            if (sol.Unid_datosgral != 0)
                lbl_unidDatgral.Content = sol.Unid_datosgral.ToString();
            if (sol.Unid_dirfiscal != 0)
                lbl_unidDirFiscal.Content = sol.Unid_dirfiscal.ToString();
            if (sol.Unid_infoad != 0)
                lbl_unidInfoad.Content = sol.Unid_infoad.ToString();
            if (sol.Unid_documentos != 0)
                lbl_unidDocumentos.Content = sol.Unid_documentos.ToString();
            if (sol.Id_status != 0)
                lbl_idStatus.Content = sol.Id_status.ToString();
            if (sol.Id_prioridad != 0)
                lbl_idPrioridad.Content = sol.Id_prioridad.ToString();
            if (sol.Id_tipo != 0)
                lbl_idTipo.Content = sol.Id_tipo.ToString();

            sol.parametros.Clear();

            #region parametros
            // ----------   DOCINFO
            sol.SetDictionaryParameterValues("docInfo_unidDocInfo", lbl_unidDocinfo.Content.ToString());
            // ----------   STATUS, PRIORIDAD Y TIPO
            sol.SetDictionaryParameterValues("sol_idTipoSol", lbl_idTipo.Content.ToString()); //alta
            sol.SetDictionaryParameterValues("sol_idPrio", lbl_idPrioridad.Content.ToString());
            sol.SetDictionaryParameterValues("sol_idSolStat", lbl_idStatus.Content.ToString()); //borrador
            if (sender.GetType() == typeof(System.Windows.Controls.Image))
                if (((Image)sender).Name == "img_Enviar")
                    sol.SetDictionaryParameterValues("sol_unid_rol", AppConfs.Unid_datosMaestros.ToString());
            //----------- DOCUMENTOS
            if (SolicitudDocs.Trim() != "-1" && SolicitudDocs.Trim() != "0")
                sol.SetDictionaryParameterValues("doctos_unidDoctos", SolicitudDocs);

            foreach (var child in spAlta.Children)
            {
                if (child.GetType() == typeof(System.Windows.Controls.Grid))
                {
                    Grid chldGrid = (Grid)child;
                    switch (chldGrid.Name)
                    {
                        case "mainGrid":
                            sol.SetDictionaryParameterValues("sol_numCte", txt_numeroCliente.Text);
                            sol.SetDictionaryParameterValues("unidSolicitud", lbl_unidSol.Content.ToString());
                            sol.SetDictionaryParameterValues("datsol_unidSolicitudDatos", lbl_unidDatos.Content.ToString());
                            sol.SetDictionaryParameterValues("datsol_unidTipoSolicitante", cTipoSolicitud.SelectedValue.ToString());
                            sol.SetDictionaryParameterValues("datsol_isMismoDomicilio", Convert.ToInt32(chMismoDom.IsChecked).ToString());
                            sol.SetDictionaryParameterValues("datsol_isProveedor", Convert.ToInt32(chProveedor.IsChecked).ToString());
                            sol.SetDictionaryParameterValues("datsol_isOtrasCategorias", Convert.ToInt32(chOtrasCateg.IsChecked).ToString());
                            sol.SetDictionaryParameterValues("datsol_isOtrosClientes", Convert.ToInt32(chOtrosClientes.IsChecked).ToString());
                            sol.SetDictionaryParameterValues("datsol_idTipoPersonaFiscal", cPersona.SelectedValue.ToString());
                            

                            break;

                        case "gdDatosGenerales":
                            sol.SetDictionaryParameterValues("datgral_unidSolicitud", lbl_unidDatgral.Content.ToString());
                            sol.SetDictionaryParameterValues("datgral_idTipoNeg", cTipoNegocios.SelectedValue.ToString());
                            sol.SetDictionaryParameterValues("datgral_razonSocial", tRazonSocial.Text);
                            sol.SetDictionaryParameterValues("datgral_rfc", tRFC.Text);
                            sol.SetDictionaryParameterValues("datgral_correo", tEmail.Text);
                            sol.SetDictionaryParameterValues("datgral_nombreSucursal", tNombreSucursal.Text);
                            sol.SetDictionaryParameterValues("datgral_numSucursal", tNumeroSucursal.Text);
                            sol.SetDictionaryParameterValues("datgral_idGrupoClientes4", cGrupoClientes4.SelectedValue.ToString());

                            break;
                        case "gdDatosFiscales":
                            sol.SetDictionaryParameterValues("dirFis_unidDirFiscal", lbl_unidDirFiscal.Content.ToString());
                            sol.SetDictionaryParameterValues("dirFis_calle", tCalle.Text);
                            sol.SetDictionaryParameterValues("dirFis_numExt", tNoExterior.Text);
                            sol.SetDictionaryParameterValues("dirFis_numInt", tNoInterior.Text);
                            if (UnidDirFiscal != "")
                                sol.SetDictionaryParameterValues("dirFis_unidSepomex", UnidDirFiscal);//tCodigoPostal.Text.ToString());
                            sol.SetDictionaryParameterValues("dirFis_lada", tLada.Text);
                            sol.SetDictionaryParameterValues("dirFis_tel", tTelFiscal.Text);
                            sol.SetDictionaryParameterValues("dirFis_local", (cLocalidad.DataContext != null) ? cLocalidad.SelectedValue.ToString() : "");
                            sol.SetDictionaryParameterValues("dirFis_TelExtFiscal", tbTelExtFiscal.Text);
                            sol.SetDictionaryParameterValues("dirFis_FaxFiscal", tbFaxFiscal.Text);
                            sol.SetDictionaryParameterValues("dirFis_FaxExtFiscal", tbFaxExtFiscal.Text);

                            break;
                    }//end switch
                }//if
            }//foreach

            #endregion
            //pop.HidePopup();
            return sol;
        }

        override public void lblGuardar_MouseUp(object sender, MouseButtonEventArgs e)
        {
            UpsertWeb();
            base.lblGuardar_MouseUp(sender, e);
        }
        public void UpsertWeb()
        {
            try
            {
                sol.Modificacion = true;
                sol.Sapsap = Respuesta;
                sol.Sapsap_msj = Mensaje;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        override public bool ValidarEnviado()
        {
            bool bandera = true;
            string sArchivos;
            cargaListTextBox();
            foreach (TextBox tx in liTxt)
                if (tx.Text.Length == 0)
                {
                    tx.BorderBrush = new SolidColorBrush(Colors.Red);
                    tx.Background = new SolidColorBrush(Colors.Red);
                    tx.Foreground = new SolidColorBrush(Colors.White);
                    bandera = false;
                }
                else
                {
                    tx.BorderBrush = new SolidColorBrush(SystemColors.ActiveBorderColor);
                    tx.Background = new SolidColorBrush(Colors.White);
                    tx.Foreground = new SolidColorBrush(Colors.Black);
                }

            if (!ValidarRFC(tRFC))
                bandera = false;
            if (!ValidarEmail(tEmail))
                bandera = false;
            if (!ValidarTelefono(tTelFiscal))
                bandera = false;

            if (chMismoDom.IsChecked == true)
            {
                if (tCodigoPostal.Text != "" && tCoPoEntrega.Text != "")
                    if (!ValidarCodigoPostal(tCodigoPostal))
                        bandera = false;
            }
            else
            {
                if (!ValidarCodigoPostal(tCodigoPostal))
                    bandera = false;
            }
            if (!bandera)
            {
                MessageBox.Show("La solicitud no puede ser Enviada. Revise y valide los campos marcados", "Atención", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return bandera;
            }

            if (!validaArchivos(out sArchivos))
            {
                MessageBox.Show(sArchivos, "Atención", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                bandera = false;
            }

            return bandera;
        }

        override public void lblEnviar_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            try
            {
                UpsertWeb();
                base.lblEnviar_PreviewMouseDown(sender, e);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        override public bool ValidarGuardado()
        {
            bool bandera = true;

            if (!ValidarRFC(tRFC))
                bandera = false;
            if (tRazonSocial.Text != "")
            {
                tRazonSocial.BorderBrush = new SolidColorBrush(SystemColors.ActiveBorderColor);
                tRazonSocial.Background = new SolidColorBrush(Colors.White);
                tRazonSocial.Foreground = new SolidColorBrush(Colors.Black);
            }
            else
            {
                tRazonSocial.BorderBrush = new SolidColorBrush(Colors.Red);
                tRazonSocial.Background = new SolidColorBrush(Colors.Red);
                tRazonSocial.Foreground = new SolidColorBrush(Colors.White);
                bandera = false;
            }

            if (tEmail.Text != "")
                if (!ValidarEmail(tEmail))
                    bandera = false;
            if (tTelFiscal.Text != "")
                if (!ValidarTelefono(tTelFiscal))
                    bandera = false;
            if (!bandera)
            {
                MessageBox.Show("La solicitud no puede ser guardada. Revise y valide los campos marcados", "Atención", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return bandera;
            }
            else return bandera;
        }

        public Dictionary<string, string> createConsultDictionary(string id)
        {
            Dictionary<string, string> str = new Dictionary<string, string>();
            str.Add("MTYPE", "CON");
            str.Add("KUNNR", id);  //"0000200846");//"0000200738");
            str.Add("BUKRS", "1725");
            str.Add("SPART", "00");
            str.Add("VKORG", "MX01");
            str.Add("VTWEG", "12");

            return str;
        }

      
    }
    
}
